前面了解了 MVC 架構之後,我們就要準備來撰寫程式碼,首先會寫的是 Controller 的部分,但是在那之前會有一些地方要先改一下設置,這樣才能方便我們開發。
我建議在操作接下來的動作之前,先開啟 debug 模式,如果你不開啟 debug 模式你會很難找問題(就跟你寫 JavaScript 不使用 console.log()
debug 一樣),那開啟之後你就可以看到比較詳細的錯誤訊息,這樣子對於你在開發上也會比較清楚問題在哪裡,但是要記得部屬專案時,請務必要關閉 debug 模式 唷 ↓
開啟方式很簡單,只要開啟位於專案目錄 config/app.php
中,然後搜尋 app_debug
將該選項修改為 true
這樣就開啟了 debug 模式囉 ↓
起手式這邊我們會先學習如何定義一個 Controller,那什麼是定義呢?所謂的定義你可以想像成我們在準備要蓋東西的材料,以 JavaScript 舉例的話,就像是建立一個 function
的概念,所以不用想太難唷~
首先讓我們打開目錄到 /project/application
下,然後在底下建立一個資料夾叫 about,並且在底下再建立一個 controller 資料夾(注意不要大寫 C),然後也建立一個 index.php
檔案,初始內容則如下:
<?php
namespace app\about\controller;
class Index
{
public function index()
{
return 'About!';
}
}
這邊要注意 namespace
的意思是定義命名空間,所以不要使用預設 namespace app\index\controller;
而是要將命名空間定義成 about
,如果不這樣做,將會導致發生衝突問題,當然也會因為你的 namespace
不正確而導致找不到 Controller 的問題發生 ↓
那麼這樣子就是一個基礎的起手式定義 Controller,非常簡單吧~
但是我們前面有講過,在現階段開發上,我們是採用 Route 來訪問 URL,但是 Route 定義的部分將會在後面做介紹。
在目錄結構的結尾我有稍微介紹 URL 的結構,主要會是透過 Route 來決定 URL 訪問,那麼這邊再稍微講一下 URL 的訪問相關吧!
首先 ThinkPHP 預設 Controller 訪問 URL 規則是這樣子 http://localhost:8000/index/index
,通常 index
可以被忽略,所以只需要輸入 http://localhost:8000
即可,但若我們想要訪問 about
的 Controller 中 index 方法的話,就會變成這樣 http://localhost:8000/about/index
,當然也可以只輸入這樣子 http://localhost:8000/about
↓
但是假使果我們的 about 底下還有其他 Controller呢?例如 HelloWorld.php,而以下是程式碼初始內容:
<?php
namespace app\about\controller;
class HelloWorld
{
public function Hello()
{
return 'hello,world!';
}
}
那麼 URL 訪問的方式就會是這樣 http://localhost:8000/about/hello_world/hello
。
ThinkPHP 在轉換 URL 時,當遇到大寫會轉換為小寫,若是夾在中間的大寫則會轉換為底線 _
↓
其實我們可以發現不透過 View 單純使用 Controller 也是可以呈現畫面給使用者,但是這樣子就有點不符合 MVC 的設計規範,所以這一篇只是介紹基礎的 Controller 定義方法與操作而已,後面還會有更多的 Controller 撰寫唷。
本文同步發表於:https://hsiangfeng.github.io/php/20190910/533664939/
你好
我有問題
我的文件有些都跟你的不太一樣 application資料夾我這邊是APP
像config/app
return [
// 应用地址
'app_host' => env('app.host', ''),
// 应用的命名空间
'app_namespace' => '',
// 是否启用路由
'with_route' => true,
// 是否启用事件
'with_event' => true,
// 默认应用
'default_app' => 'index',
// 默认时区
'default_timezone' => 'Asia/Shanghai',
// 应用映射(自动多应用模式有效)
'app_map' => [],
// 域名绑定(自动多应用模式有效)
'domain_bind' => [],
// 禁止URL访问的应用列表(自动多应用模式有效)
'deny_app_list' => [],
// 异常页面的模板文件
'exception_tmpl' => app()->getThinkPath() . 'tpl/think_exception.tpl',
// 错误显示信息,非调试模式有效
'error_message' => '页面错误!请稍后再试~',
// 显示错误信息
'show_error_msg' => false,
沒有app_debug模式
還有我的namespace都改about
index也有錯誤 如下
页面错误!请稍后再试~
ThinkPHP V6.0.2 { 十年磨一剑-为API开发设计的高性能框架 } - 官方手册
這一系列是基於 ThinkPHP 5 撰寫的,後來 ThinkPHP 6 是有針對核心結構再做調整,所以是會有一些許不同的唷 :D
那由於 ThinkPHP 6 近期剛發佈所以還沒說非常穩定,目前來講還是會推薦使用 ThinkPHP 5 會比較好就是了(朋友說的
那如果要裝版本5的指令怎麼打呢
輸入 composer create-project topthink/think=5.1.*
就可以囉
在請問我index跟hellow都是namespace app\about\controller;
但是都顯示控制器不存在:app\about\controller\Index
是哪邊錯了嗎
基本上這邊會建議你參考一下這一份完整檔案,然後從中研究看看哩
https://github.com/hsiangfeng/ithelpThinkPHP
OK 感謝